//字符大写
var toUpperCaze = function(x){
    return x.toUpperCase();
}
//字符小写
var tolowerCaze = function(x){
    return x.toLowerCase();
}

var hello = function(x){
  return "Hello " + x;
}
// 组合toUpperCase和hello-> greet
//return值为函数 名为高阶函数
// 抽象函数 C =AB

//return值为函数 名为高阶函数
// var greet = function(x){
//     return hello(toUpperCaze(x));
// }
//具体
// var greet2 = function(x){
//     return hello(tolowerCaze(x));
// }
// console.log(greet ('kevin'))
//手写compose 组合函数
// var compose = function(f,g){
//     //闭包
//     return function(x){
//         return f(g(x));
//     }
// }
var compose = function(...fns){
    var args = arguments;
    var start = args.length -1;//最里面的函数
    return funxtion(x){
        var i = start;
        var result = args[start].apply(this,arguments);
        while(i--){
            result = args[i].call(this,result);
        }
    }
}


 
var greet = compose(hello,toUpperCaze);
console.log(greet('kevin'));